package com.xbts.system.service;

import com.huaweicloud.sdk.ecs.v2.model.ListServerBlockDevicesRequest;
import com.huaweicloud.sdk.ecs.v2.model.ListServersDetailsResponse;
import com.huaweicloud.sdk.ecs.v2.model.ShowServerRequest;
import com.huaweicloud.sdk.ecs.v2.model.ShowServerResponse;
import com.huaweicloud.sdk.eip.v2.model.*;
import com.huaweicloud.sdk.eip.v3.model.DisassociatePublicipsRequest;
import com.huaweicloud.sdk.evs.v2.model.CreateVolumeRequest;
import com.huaweicloud.sdk.evs.v2.model.CreateVolumeResponse;
import com.huaweicloud.sdk.vpc.v2.model.ListVpcsResponse;
import com.xbts.common.core.domain.AjaxResult;
import com.xbts.system.domain.dto.*;

/**
 * @Author llk
 * @Date 2023/8/7 9:50
 */
public interface ICloudControlService {

    /**
     * 查询云服务器详情列表
     *
     * @param listServersDetailsRequest 请求参数
     * @return 云服务器详情列表
     */
    ListServersDetailsResponse listServersDetails(ListServersDetailsRequestDTO listServersDetailsRequest);

    /**
     * 批量关闭云服务器
     * @param batchStopServersRequestBodyDTO    请求参数
     * @return 操作结果
     */
    AjaxResult batchStopServers(BatchStopServersRequestBodyDTO batchStopServersRequestBodyDTO);

    /**
     * 批量启动云服务器
     * @param batchStartServersRequestBody 请求参数
     * @return 操作结果
     */
    AjaxResult batchStartServers(BatchStartServersRequestBodyDTO batchStartServersRequestBody);

    /**
     * 批量重启云服务器
     * @param batchRebootServersRequestBodyDTO 请求参数
     * @return 操作结果
     */
    AjaxResult batchRebootServers(BatchRebootServersRequestBodyDTO batchRebootServersRequestBodyDTO);

    /**
     * 批量修改云服务器名称
     * @param batchRebootServersRequestBodyDTO 请求参数
     * @return 操作结果
     */
    AjaxResult batchUpdateServersName(BatchUpdateServersNameRequestBodyDTO batchRebootServersRequestBodyDTO);

    /**
     * 批量重置云服务器密码
     * @param batchResetServersPasswordRequestBodyDTO 请求参数
     * @return 操作结果
     */
    AjaxResult batchResetServersPassword(BatchResetServersPasswordRequestBodyDTO batchResetServersPasswordRequestBodyDTO);

    /**
     * 获取VNC远程登录地址
     * @param showServerRemoteConsoleRequestDTO 请求参数
     * @return 操作结果
     */
    AjaxResult showServerRemoteConsole(ShowServerRemoteConsoleRequestDTO showServerRemoteConsoleRequestDTO);

    /**
     * 续订包年/包月资源
     * @param renewalResourcesReqDTO 请求参数
     * @return 操作结果
     */
    AjaxResult renewalResources(RenewalResourcesReqDTO renewalResourcesReqDTO);

    /**
     * 获取云服务器磁盘信息失败
     * @param showServerBlockDeviceRequestDTO 请求参数
     * @return 操作结果
     */
    AjaxResult showServerBlockDevice(ShowServerBlockDeviceRequestDTO showServerBlockDeviceRequestDTO);

    /**
     * 查询弹性云服务器挂载磁盘信息
     * @param listServerBlockDevicesRequest 请求参数
     * @return 操作结果
     */
    AjaxResult listServerBlockDevices(ListServerBlockDevicesRequest listServerBlockDevicesRequest);

    /**
     * 弹性云服务器卸载磁盘
     * @param detachServerVolumeRequestDTO 请求参数
     * @return 操作结果
     */
    AjaxResult detachServerVolume(DetachServerVolumeRequestDTO detachServerVolumeRequestDTO);

    /**
     * 弹性云服务器挂载磁盘
     * @param attachServerVolumeRequestDTO 请求参数
     * @return 操作结果
     */
    AjaxResult attachServerVolume(AttachServerVolumeRequestDTO attachServerVolumeRequestDTO);

    /**
     * 切换弹性云服务器操作系统(安装Cloud init)
     *
     * @param changeServerOsWithCloudInitRequestDTO@return 操作结果
     */
    AjaxResult changeServerOsWithCloudInit(ChangeServerOsWithCloudInitRequestDTO changeServerOsWithCloudInitRequestDTO);

    /**
     * 重装弹性云服务器操作系统（安装Cloud-init）
     * @param reinstallServerWithCloudInitRequestDTO    请求参数
     * @return 操作结果
     */
    AjaxResult reinstallServerWithCloudInit(ReinstallServerWithCloudInitRequestDTO reinstallServerWithCloudInitRequestDTO);

    /**
     * 解绑弹性公网IP
     * @param regionIdDTO  请求参数
     * @return 操作结果
     */
    AjaxResult disassociatePublicips(RegionIdDTO<DisassociatePublicipsRequest> regionIdDTO);

    /**
     * 修改带宽
     * @param regionIdDTO 请求参数
     * @return 操作结果
     */
    AjaxResult updatePrePaidBandwidth(RegionIdDTO<UpdatePrePaidBandwidthRequest> regionIdDTO);
    /**
     * 查询带宽
     * @param regionIdDTO 请求参数
     * @return 操作结果
     */
    AjaxResult showBandwidth(RegionIdDTO<ShowBandwidthRequest> regionIdDTO);

    /**
     * 查询云服务器规格变更支持列表
     * @param regionIdDTO 请求参数
     * @return 操作结果
     */
    AjaxResult listResizeFlavors(RegionIdDTO<UpdatePrePaidBandwidthRequest> regionIdDTO);

    /**
     * 查询VPC列表
     * @param regionIdDTO 请求参数
     * @return 操作结果
     */
    ListVpcsResponse listVpcs(RegionIdDTO<UpdatePrePaidBandwidthRequest> regionIdDTO);

    /**
     * 查询云服务器详情
     * @param regionIdDTO 请求参数
     * @return 操作结果
     */
    ShowServerResponse showServer(RegionIdDTO<ShowServerRequest> regionIdDTO);

    /**
     * 查询弹性公网IP列表
     * @param regionIdDTO 请求参数
     * @return 操作结果
     */
    ListPublicipsResponse listPublicips(RegionIdDTO<ListPublicipsRequest> regionIdDTO);

    /**
     * 创建云硬盘
     * @param regionIdDTO 请求参数
     * @return 操作结果
     */
    CreateVolumeResponse createVolume(RegionIdDTO<CreateVolumeRequest> regionIdDTO);
}
